Amazon Linux2 のLAMP環境、PHP7.2とMariaDB10.2.10をUserDataで初期設置してみた
はじめに
AWSチームのすずきです。
Amazon Linux2 のAMIを利用して起動したEC2、 UserDataを利用して、PHP7.2、MariaDB10.2、WordPressの推奨バージョンに準じたLAMP環境を構築する機会がありましたので紹介します。
参考
-チュートリアル: Amazon Linux 2 に LAMP ウェブサーバーをインストールする
構成図
設定
- AMI ID : amzn2-ami-hvm-2.0.20190508-x86_64-gp2 (ami-00d101850e971728d)
UserData
#cloud-config
形式でUserDataを記述します。- Amazon Linux 2 のエクストラライブラリ
lamp-mariadb10.2-php7.2
を有効化します。
mariadb
mariadb-server
(mariadb-10.2.10-2.amzn2.0.3.x86_64) をインストールします。- MySQLのDB設定
/etc/my.cnf
を行います。 - 文字コード
character-set-serve
UTF-8 - クエリキャッシュを有効化
query_cache_type=1
し、キャッシュ容量は32MBに拡張します。 - DBユーザ設定を行います。
mysql_secure_installation
コマンド相当のSQLを実行し、DBのセキュリティを強化します。/root/.my.cnf
にDB認証情報を反映、OSのroot
ユーザによるDBアクセスを可能にします。
httpd
httpd
(httpd-2.4.39-1.amzn2.0.1.x86_64)、php7.2
(php-common-7.2.16-1.amzn2.0.1.x86_64) をインストールします。- php7.2 と同時にインストールされないが、WordPressなどで利用される事の多い、xml, mbstring , intl, mcrypt , gd などは追加インストールします。
- ELBとしてALBが利用される事に備え、keepalive、mod_http2 設定を行います。
AmazonLinux2のhttpdをALB経由で公開するWeb環境で発生していた、SafariのHTTPS接続エラーを改善してみた
- ELBのヘルスチェック先となるindex.htmlを設置します。
- クロール禁止を示す robots.txt を設置。開発、検証環境のコンテンツが検索サイトに意図せず登録される事を回避します。
#cloud-config packages: - jq - httpd runcmd: yum update -y # lamp-mariadb10.2-php7.2 - amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2 # mariadb - yum install mariadb-server -y - cp -b /root/cloud-init/mysql/my.cnf /etc/my.cnf ## systemctl - systemctl start mariadb - systemctl enable mariadb ## db-init - [ sh, -c, "cat /root/cloud-init/mysql/db-secure_installation.sql | mysql -u root" ] - echo -e "[client]\npassword=\"aaaaaaaa\"" > /root/.my.cnf - chmod 400 /root/.my.cnf # httpd ## xml, mbstring , intl, mcrypt - yum install php-xml php-xmlrpc php-mbstring php-intl php-pecl-mcrypt php-xsl -y ## gd - yum install php-gd -y ## keepalive - cp /root/cloud-init/httpd/keepalive.conf /etc/httpd/conf.d/keepalive.conf ## mod_http2 off - sed -i -e "s/^LoadModule/#LoadModule/g" /etc/httpd/conf.modules.d/10-h2.conf ## index.html - echo "<html><body>$INSTANCE_ID<br>`date`</body></html>" > /var/www/html/index.html ## systemctl - systemctl start httpd - systemctl enable httpd write_files: # /etc/my.cnf | - content: | [client-server] [mysqld] query_cache_type=1 query_cache_size=32M character-set-server=utf8 symbolic-links=0 !includedir /etc/my.cnf.d mode: '000600' owner: root group: root path: /root/cloud-init/mysql/my.cnf # mysql_secure_installation (substitution) - content: | UPDATE mysql.user SET Password=PASSWORD('aaaaaaaa') WHERE User='root'; DELETE FROM mysql.user WHERE User=''; DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); DROP DATABASE test; DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'; FLUSH PRIVILEGES; mode: '000600' owner: root group: root path: /root/cloud-init/mysql/db-secure_installation.sql # httpd - content: | KeepAlive On KeepAliveTimeout 120 mode: '000644' owner: root group: root path: /etc/httpd/conf.d/keepalive.conf - content: | User-agent: * Disallow: / mode: '000644' owner: root group: root path: /var/www/html/robots.txt
動作確認
- OSの root 権限を利用して、mysql コマンドによるDBの動作、設定確認を実施しました。
sudo mysql -u root
クエリキャッシュ
- query_cache_type が「ON」、query_cache_size が32MBに設定されています。
MariaDB [(none)]> SHOW VARIABLES LIKE '%query_cache%'; +------------------------------+----------+ | Variable_name | Value | +------------------------------+----------+ | have_query_cache | YES | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 33554432 | | query_cache_strip_comments | OFF | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | +------------------------------+----------+ 7 rows in set (0.00 sec)
mysqldump
- OSの root 権限を利用して、mysqldump コマンドによるDBダンプが出力できる事を確認します。
$ sudo mysqldump -u root --databases mysql -- MySQL dump 10.16 Distrib 10.2.10-MariaDB, for Linux (x86_64) -- -- Host: localhost Database: wordpress_db -- ------------------------------------------------------ -- Server version 10.2.10-MariaDB /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; (略) -- Dump completed on 2019-05-16 9:08:06
- DBダンプ、インポートが出来る事を確認します。
$ sudo mysqldump -u root --databases mysql | gzip > /tmp/dmp.sql.gz $ zcat /tmp/dmp.sql.gz | sudo mysql -u root mysql
まとめ
Amazon Linux 2 のAMIを利用した LAMP環境、 EC2インスタンスの起動時に設定、作成する事ができました。
Amazon Linux 2 デフォルトのリポジトリでインストールされるPHP、バージョンは5.4.16(5.4.16-45.amzn2.0.6)となります。
2019年5月時点で、CMSのWordPressが推奨する PHPのバージョンは7.3。 サポート外ながら動作する可能性のあるとされるPHPバージョンも5.6.20以降とされており、 WordPress本体や関連するプラグインは、PHP5.4の環境では正常な動作が期待できない可能性があります。
(WordPress 要件) [https://ja.wordpress.org/about/requirements/] WordPress を実行するには、以下のホスティング環境を推奨します。 PHP バージョン 7.3 以上。 MySQL バージョン 5.6 以上、または MariaDB バージョン 10.1 以上。 HTTPS 対応
エクストラライブラリは Amazon Linux2の LTSサポート外。将来的に新しいPHPへのバージョンアップが必要となる可能性はありますが、 現時点でPHP7のLAMP実行環境をAmazon Linux2で構築される場合には、lamp-mariadb10.2-php7.2 の エクストラライブラリを第一候補としてお試しください。
テンプレート
今回利用したCloudFormationテンプレートです。